package com.qdxwx.data.mapper.course;

import com.qdxwx.common.page.PageRequest;
import com.qdxwx.models.course.Course;
import com.qdxwx.models.course.CourseDTO;
import com.qdxwx.models.course.CourseQuery;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * Course接口
 * Qdx NetSchool Platform
 * @author qdxwx
 * @updateTime 2022/5/25
 * @description
 */
@Repository
public interface CourseMapper {
	/**
	 * 添加Course
	 */
	int insertCourse(Course course);

	int deleteCourseById(int courseId);
	/**
	 * 更新课程数据
	 */
	int updateCourse(Course course);

	/**
	 * 更新课程的数据数量（浏览数，购买数）
	 */
	int updateViewCount(int courseId);

	/**
	 * 更新课程的数据数量（浏览数，购买数）
	 */
	int updateBuyCount(int courseId);

	/**
	 * 通过ID，查询课程数据
	 */
	Course selectById(int courseId);

	/**
	 * 通过ID，查询课程数据
	 */
	CourseDTO selectDTOById(int courseId);

	CourseDTO selectMyCourse(long userId, int courseId);

	List<Course> selectCourseList(@Param("e") CourseQuery course, @Param("page")  PageRequest page);

	int count(@Param("e") CourseQuery course);

	/**
	 * 分页查询我的课程列表
	 */
	List<CourseDTO> selectMyCourseList(@Param("e") CourseQuery courseQuery, @Param("page") PageRequest page);

	int countMyCourse(@Param("e") CourseQuery query);
	/**
	 * 查询相关课程
	 */
	List<CourseDTO> selectInterfixList(@Param("e") Course course, @Param("count") int limit);

	/**
	 * 根据AlbumId		查询课程专集
	 */
	List<CourseDTO> selectDTOListByAlbumId(Integer albumId);

	/**
	 * 获得专业下的所有课程
	 */
	List<Course> getCouponSubjectCourse(@Param("categoryId") Integer categoryId, @Param("courseIds") String courseIds);

	/**
	 * 后台根据条件获取套餐下课程详细信息
	 */
	List<CourseDTO> selectPackageList(@Param("e") Course course, @Param("page") PageRequest page);

	int selectPackageCount(@Param("e") Course course);

	/**
	 * 以课程Id获取所有父套餐
	 * @param courseId
	 * @return
	 */
	List<CourseDTO> selectPackageParents(int courseId);


	/**
	 * 获取课程套餐的详细课程列表
	 */
	List<CourseDTO> selectListByPackage(List<Integer> ids);

	/**
	 * 订单id查询流水的课程集合
	 *
	 * @param orderNo
	 * @return
	 */
	List<Course> selectListByOrderNo(String orderNo);

	/**
	 * 根据条件获取购物车课程集合(优惠券专用)
	 *
	 * @param userId
	 * @param type 1课程 2套餐（备用）
	 *            查询条件
	 * @return List<ShopCart>
	 */
	List<Course> selectListByShopCart(Long userId, Integer type);

    int updateTotalDurations(int courseId, int totals);
}